﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Segmentator.Dividers
{
    /// <summary>
    /// Отвечает за закон изменения порога
    /// </summary>
    abstract class ThresholdVariator
    {

        /// <summary>
        /// Левая граница
        /// </summary>
        protected double LeftBound;
        /// <summary>
        /// Правая граница
        /// </summary>
        protected double RightBound;

        /// <summary>
        /// Текущее значение порога
        /// </summary>
        protected double Threshold;

        public ThresholdVariator(double leftBound, double rightBound)
        {
            LeftBound = leftBound;
            RightBound = rightBound;
            Threshold = rightBound;
        }

        /// <summary>
        /// Следующее значение порога
        /// </summary>
        /// <param name="dist">Некоторая величина расхождения. Используется только в нескольких методах </param>
        /// <returns></returns>
        public abstract double next(double dist);
       
        /// <summary>
        /// Текущее значение порога
        /// </summary>
        /// <returns></returns>
        public double GetCurrent()
        {
            return Threshold;
        }

        /// <summary>
        /// Расстояние между границами
        /// </summary>
        /// <returns></returns>
        public double GetDistortion()
        {
            return RightBound - LeftBound;
        }
    }
}
